perm filename USC2SU.SAI[PIC,TOB] blob
sn#229563 filedate 1976-07-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 convert usc format to su format files
C00003 00003 RECORD_POINTER (IO) IFILE comment input file, channel,etc
C00007 ENDMK
C⊗;
comment convert usc format to su format files;
BEGIN "USC TO SU"
EXTERNAL PROCEDURE BAIL;
REQUIRE "ABBREV.1D[S1,TOB]" SOURCE_FILE;
REQUIRE "STD.12H[S1,TOB]" SOURCE_FILE;
REQUIRE "STD[S1,TOB]" LOAD_MODULE;
REQUIRE "FILEIO.2E[S2,TOB]" SOURCE_FILE;
REQUIRE "FILEIO[S2,TOB]" LOAD_MODULE;
RECORD_POINTER (IO) IFILE; comment input file, channel,etc;
RECORD_POINTER (IO) OFILE; comment output file,channel,etc;
STRING NAME; comment file name;
NAME←ASK_STRING(CRLF&"FILE NAME ");
NEWFILE(IFILE,NAME,"USC","PIC,HE");
OPEN_I(IFILE,BINARY_FILE);
NEWFILE(OFILE,NAME,"SU","PIC,HE");
OPEN_O(OFILE,BINARY_FILE);
BEGIN "HEADER"
INTEGER UNPACKED; comment nonzero if file is unpacked;
INTEGER BITS,BYTES;
INTEGER X1,Y1,X2,Y2;
INTEGER WDS_LINE,SIZE_FILE;
INTEGER I;
BITS←8;
X1←Y1←1;
X2←Y2←512;
WRITE(BITS);WRITE(X1);WRITE(X2);WRITE(Y1);WRITE(Y2);
PRINT(CRLF);
COMMENT MODIFY(X2);
PRINT(CRLF,"USC files are usually packed 4 bytes per word.");
PRINT(CRLF,"If unpacked, two bytes per word.",CRLF);
COMMENT MODIFY(UNPACKED);
COMMENT BAIL;
WORDOUT(IO:CH[OFILE],-1); comment first word identifier;
WORDOUT(IO:CH[OFILE],BITS);comment number of bits;
BYTES←WORD_SIZE%BITS;comment bytes per word;
WDS_LINE←(X2-X1+BYTES)%BYTES;
WORDOUT(IO:CH[OFILE],WDS_LINE);
WORDOUT(IO:CH[OFILE],Y1);
WORDOUT(IO:CH[OFILE],Y2);
WORDOUT(IO:CH[OFILE],X1);
WORDOUT(IO:CH[OFILE],X2);
SIZE_FILE←WDS_LINE*(Y2-Y1+1);
WORDOUT(IO:CH[OFILE],XWD(-SIZE_FILE,'200));
FOR I←1 STEP 1 UNTIL 3 DO WORDOUT(IO:CH[OFILE],0);
FOR I←'13 STEP 1 UNTIL '177 DO WORDOUT(IO:CH[OFILE],0);
IF ¬UNPACKED THEN
INOUT(IO:CH[IFILE],IO:CH[OFILE],SIZE_FILE);
IF UNPACKED THEN BEGIN "PACKW"
INTEGER X,Y; comment indices;
INTEGER M2,M4; comment masks for bytes 2 and 4;
M2←'377 LSH 20;
M4←'377 LSH 4; comment byte 4;
PRINT(CRLF,"Y ");
FOR Y←Y1 STEP 1 UNTIL Y2 DO BEGIN "ROW"
IF Y MOD 50 = 0 THEN PRINT (Y);
FOR X←X1 STEP 4 UNTIL X2 DO BEGIN "COLUMN"
INTEGER W; comment input word;
INTEGER WO; comment packed output word;
W←WORDIN(IO:CH[IFILE]);
comment get the first two bytes w=0,b1,0,b2,0;
WO←((W LAND M2) LSH 8)
+((W LAND M4) LSH 16);
W←WORDIN(IO:CH[IFILE]);
comment get the next two bytes w=0,b3,0,b4,0;
WO←WO+((W LAND M2) LSH -8)
+(W LAND M4);
WORDOUT(IO:CH[OFILE],WO);
END "COLUMN";
END "ROW";
END "PACKW";
CLOSE(IO:CH[OFILE]);
END "HEADER";
END "USC TO SU";